from setting import *
from animation import *
from missle import *

class GuidedMissle(Missle):
    #之所以代group参数，是想以后英雄飞机也用得到
    def __init__(self,group):
        self._layer = 5
        self.groups = allgroup,group
        pygame.sprite.Sprite.__init__(self,self.groups)
        self.animation = Animation()
        self.images = self.animation.load_image('images/missle/gmissle.png',
                                                60, 93, 1, 2)
        #必不可少的两条代码
        self.image = self.images[0].convert_alpha()
        self.rect = self.image.get_rect()
        #初设速度、角度
        self.x_speed = 0.00
        self.y_speed = 2.00
        self.speed = 5
        self.damage = 3
        self.angle = 0
        # 初始化阶段赋值，以后这个original图片坐标、方向都是不变的，self.image是变化的。
        # sprite 显示的是self.image
        self.original = self.image.convert_alpha()

  
    def update(self):
        """更新导弹位置
           旋转图像，计算x,y方向速度
           计算更新后的坐标点
           超出屏幕自动从所有精灵组删除
        """
        self.original = self.animation.get_current_image()
        #记录原有中心，复杂转换的图像，转换后中心为原中心
        original_center = self.rect.center
        #rotate后，original还是保持不变的,包括角度和坐标点，变的是self.image
        #self.image得到的是转变后的图像和图像的坐标，该坐标是(0,0,width,height)转角度angle后的坐标
        #不是当前位置的坐标。所以还得给转变后的图像的坐标重新赋值。
        self.image = pygame.transform.rotate(self.original, 90 - self.angle).convert_alpha()
        self.rect.center = original_center
        self.mask = pygame.mask.from_surface(self.image)
        #用临时变量来进行degree和 radian 之间的转换
        angle = self.angle * math.pi / 180
        self.x_speed = self.speed * math.cos(angle)
        self.y_speed = self.speed * math.sin(angle)
        self.rect.x += self.x_speed
        self.rect.y += self.y_speed
        #当目标在导弹到达之前没了，改何去何从？？
        #在主函数里，寻找下一个目标，如果没目标，往太空飞,飞出屏幕后自毁
        if not self.rect.colliderect(SCENERECT):
            self.kill()

    